Qt5.3文档翻译:QPointer类,QPointer Class
QPointer 类是一个模板类,提供 了指向 QObject 的受保护的指 针 。 详情……
头文件: |
#include <QPointer> |
qmake: |
QT += core |
QPointer 类是一个模板类,提供 了指向 QObject 的受保护的指 针 。
一个受保护的指针, QPointer<T> ,其行为与普通的C++指针 T * 类似, 不同之处就在于, 当它所引用的对象被删除时,会将自己自动设置为 0( 不像 普通的 C++指针 , 在这种情况下会成为“迷途指针” ) 。 T 必须 是 QObject 的子类。
受保护的指针,可用来储存一个被别人所拥有的 QObject 的指针, 在妳仍然引用该对象时,对象可能会被删除。 妳可以安全地对该指针进行测试,以检查其有效性。
注意,在Qt 5中,对于QPointer 的行为,引入了一个小小的变化。
•. 在使用QPointer 来引用 QWidget (或者 QWidget 的子类 )的情况下,在之前的版本中,该QPointer 会被该 QWidget 的析构函数所清空。如今, 该 QPointer 会由 QObject 的析构函数清空 (因为 这也是 QWeakPointers 的清空时机 ) 。任何 一个用来跟踪某个部件的QPointer, 在 QWidget 析构函数销毁掉该部件的子代对象之前,都 不会 被清空。
Qt 还提供了 QSharedPointer ,这是一种带引用计数的共享指针对象, 可用来维护指向同一个指针的多个引用。
示例:
QPointer < QLabel > label = new QLabel ;
label->setText("&Status:");
...
if (label)
label->show();
如果 在这 个 过程中,该 QLabel 被删除了,则,此处 的 label 变量 的值会是 0 ,而不是一个无效的地址,于是最后 一行就不会被执行。
QPointer 所提供的函数和操作符与普通未保护的指针相同, 例外之处就是指针的算术操作符 ( + 、 - 、 ++ 和 -- ) , 这些操作符一般在指向对象数组时使用。
如果只是准备将QPointers当作普通的指针来用,那么,妳无需阅读这个类的文档。
要想创建被保护的指针,则, 妳可以从一个T*或者相同类型的另一个被保护的指针来构造或者赋值来得到它们 。 妳可以使用operator==()和operator!=()来对它们进行比较,或者使用 isNull ()来测试它们是否为 0 。 妳可以使用 *x 或 x->member 标记来对它们进行解引用。
一个被保护的指针会自动转换成 T * ,所以 妳可以随心所欲地混用被保护的和未保护的指针。 这就意味着,如果 妳有一个 QPointer< QWidget > ,那么,妳可以将它传递给一个要求 QWidget *类型参数的函数。出于 这个原因, 要 声明 一个 以 QPointer 为参数的函数是没有意义的;只管使用普通 的指针就行了。如果 妳需要长期储存某个指针的话,则使用QPointer 吧。
注意 ,类 T 必须继承 自 QObject ,否则 将产生一个编译或链接错误。
参考 QSharedPointer 、 QObject 和 QObjectCleanupHandler 。
返回正在被保护的对象的指针。
此函数是从Qt 4.4 开始引入的。
Your opinionsHxLauncher: Launch Android applications by voice commands